// rules FormatString {
//     (fmt(${_: Byte})) => "%hh";
//     (fmt(${_: Short})) => "%h";
//     (fmt(${_: Int})) => "%l";
//     (fmt(${_: Long})) => "%ll";
//     (fmt(${_: Float})) => "%f";
//     (fmt(${_: Double})) => "%f";
// }

// public function println(s: CString) {
    // printf("%s\n", s);
// }

// public inline function print[S: ToString](s: S) {
    // println(s.toString());
// }

#[noreturn] function panic(msg: Const[CString], args...) {
    static if defined stderr {
        // use stderr in environments where it's defined
        vfprintf(stderr, msg, (args...));
        fputs("", stderr);
    } else {
        // fall back to stdout
        vprintf(msg, (args...));
        puts("");
    }
    abort();
}
